import asyncio
import requests
import time
import random

import argparse
from rich.console import Console
from rich.table import Table

from scraper import Parser
from proxy import ParserProxy
import config


def get_input_parameters():

    """ Получаем входные аргументы """

    parser = argparse.ArgumentParser()

    parser.add_argument('-b', dest='display_browser', default='no', required=False)             # Отображение браузера для основного парсинга
    parser.add_argument('-bp', dest='display_browser_for_proxy', default='no', required=False)  # Отображение браузера для парсинга прокси
    parser.add_argument('-l', dest='link', default='link')                                       # Ссылка на страницу для парсинга
    parser.add_argument('-np', dest='number_pages', default='15')                                       # Ссылка на страницу для парсинга

    arguments = parser.parse_args()

    display_browser = arguments.display_browser
    display_browser_for_proxy = arguments.display_browser_for_proxy
    link = arguments.link
    number_pages = int(arguments.number_pages)

    data = (display_browser, display_browser_for_proxy, link, number_pages)

    return data


def notify_about_order_search_result(orders):

    """ Уведомляем о результате поиска заказов """

    if orders:

        for order in orders:

            message = order[0]
            link = 'https://api.telegram.org/bot{}/sendMessage?chat_id={}&text={}'.format(config.token, config.admin_id, message)
            requests.get(link)

        if len(orders) == 1:

            return 'Появился новый заказ'

        else:

            return 'Появились новые заказы ({})'.format(len(orders))

    else:

        message = 'Новых заказов нет'
        link = 'https://api.telegram.org/bot{}/sendMessage?chat_id={}&text={}'.format(config.token, config.admin_id, message)
        requests.get(link)

        return 'Новых заказов нет'


def make_pause(data, count, well_what, launch_time):

    """ Сообщаем информацию """

    current_time = str(time.ctime(time.time()))
    waiting_time_seconds = random.uniform(250, 300)
    waiting_time_minutes = str(waiting_time_seconds / 60)
    waiting_time_seconds = str(random.uniform(250, 300))
    number_pages = str(data[-1])

    table = Table(title='Weblancer ({})'.format(number_pages))
    table.add_column('#', justify='left', style='green')
    table.add_column('Message', justify='left', style='green')
    table.add_column('Waiting time', justify='left', style='green')
    table.add_column('Current time', justify='left', style='green')
    table.add_column('Launch time', justify='left', style='green')

    table.add_row(str(count), well_what, waiting_time_minutes, current_time, launch_time)

    console = Console()
    print()
    console.print(table)
    print()

    time.sleep(float(waiting_time_seconds))


def main():

    """ Запуск бота """

    count = 0
    launch_time = time.ctime(time.time())

    while True:

        final_result = []
        data = get_input_parameters()

        parser = Parser(data)
        asyncio.run(parser.start_parsing(final_result))

        well_what = notify_about_order_search_result(final_result)
        make_pause(data, count, well_what, launch_time)

        count += 1



# ТОЧКА ВХОДА

if __name__ == '__main__':

    main()
